﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WindowsFormApplication.FormBase;
using WindowsFormsView;
using WindowsFormsPresenter.Unit;
using WindowsFormsPresenter.RestaurantMenuCategory;
using WindowsFormsPresenter.RestaurantMenu;
using WindowsFormsModel.BusinessObjects;

namespace WindowsFormApplication.FormCategoryTreeView
{
    public partial class frmRestaurantMenuDetail : frmBaseTreeViewDetail, IUnitsView, IRestaurantMenuCategoriesView, IRestaurantMenuView
    {
        private UnitsPresenter _unitsPresenter;
        private RestaurantMenuCategoriesPresenter _restaurantMenuCategoriesPresenter;
        private RestaurantMenuPresenter _restaurantMenuPresenter;
        private string imgPath = null;
        private byte[] imgByte = null;

        #region Field

        public IList<UnitModel> Units
        {
            set
            {
                var units = value;

                cboUnitID.DataSource = units;
                cboUnitID.DisplayMember = "UnitName";
                cboUnitID.ValueMember = "UnitID";

                for (int i = 0; i < cboUnitID.DisplayLayout.Bands[0].Columns.Count; i++)
                {
                    cboUnitID.DisplayLayout.Bands[0].Columns[i].Hidden = true;
                }

                cboUnitID.DisplayLayout.Bands[0].Columns["UnitCode"].Hidden = false;
                cboUnitID.DisplayLayout.Bands[0].Columns["UnitName"].Hidden = false;

                cboUnitID.DisplayLayout.Bands[0].Columns["UnitCode"].Header.Caption = "Mã đơn vị tính";
                cboUnitID.DisplayLayout.Bands[0].Columns["UnitName"].Header.Caption = "Tên đơn vị tính";

                if (units.Count > 0)
                    cboUnitID.Rows[0].Selected = true;
            }
        }

        public IList<RestaurantMenuCategoryModel> RestaurantMenuCategories
        {
            set
            {
                var restaurantMenuCategories = value;

                cboMenuCategoryID.DataSource = restaurantMenuCategories;
                cboMenuCategoryID.DisplayMember = "MenuCategoryName";
                cboMenuCategoryID.ValueMember = "MenuCategoryID";

                for (int i = 0; i < cboMenuCategoryID.DisplayLayout.Bands[0].Columns.Count; i++)
                {
                    cboMenuCategoryID.DisplayLayout.Bands[0].Columns[i].Hidden = true;
                }

                cboMenuCategoryID.DisplayLayout.Bands[0].Columns["MenuCategoryCode"].Hidden = false;
                cboMenuCategoryID.DisplayLayout.Bands[0].Columns["MenuCategoryName"].Hidden = false;

                cboMenuCategoryID.DisplayLayout.Bands[0].Columns["MenuCategoryCode"].Header.Caption = "Mã loại món ăn";
                cboMenuCategoryID.DisplayLayout.Bands[0].Columns["MenuCategoryName"].Header.Caption = "Tên loại món ăn";

                if (restaurantMenuCategories.Count > 0)
                    cboMenuCategoryID.Rows[0].Selected = true;
            }
        }

        public string MenuID { get; set; }

        public string MenuCode
        {
            get { return txtMenuCode.Text; }
            set { txtMenuCode.Text = value; }
        }

        public string MenuName
        {
            get { return txtMenuName.Text; }
            set { txtMenuName.Text = value; }
        }

        public string Description
        {
            get { return txtDescription.Text; }
            set { txtDescription.Text = value; }
        }

        public string UnitID
        {
            get
            {
                if (cboUnitID.Value != null)
                {
                    return cboUnitID.Value.ToString();
                }
                else { return null; }
            }
            set { cboUnitID.Value = value; }
        }

        public decimal SalesPrice
        {
            get
            {
                if (neSalesPrice.Value != null)
                    return decimal.Parse(neSalesPrice.Value.ToString());
                else
                    return 0;
            }
            set { neSalesPrice.Value = value; }
        }

        public byte[] MenuImage
        {
            get
            {
                if (imgPath != null)
                {
                    Image img = System.Drawing.Image.FromFile(imgPath);
                    return Utils.ImageExtension.FromImageToByte(img);
                }
                else
                {
                    if (ptMenuImage.Image != null)
                        return imgByte;
                    else
                        return null;
                }
            }
            set
            {
                if (value != null && value.Length > 0)
                {
                    Image img = Utils.ImageExtension.FromByteToImage(value);
                    ptMenuImage.Image = img;
                    imgByte = value;
                }
            }
        }

        public bool IsActive
        {
            get { return chkIsActive.Checked; }
            set { chkIsActive.CheckedValue = value; }
        }

        public bool IsNorm
        {
            get { return chkIsNorm.Checked; }
            set { chkIsNorm.CheckedValue = value; }
        }

        public string RestaurantID { get; set; }

        public string MenuCategoryID
        {
            get
            {
                if (cboMenuCategoryID.Value != null)
                {
                    return cboMenuCategoryID.Value.ToString();
                }
                else { return null; }
            }
            set { cboMenuCategoryID.Value = value; }
        }

        #endregion

        protected override void InitData()
        {
            _unitsPresenter.DisplayActive();
            _restaurantMenuCategoriesPresenter.DisplayActiveByBranch();
            if (KeyValue != null && KeyValue != "")
                _restaurantMenuPresenter.Display(KeyValue);
        }

        protected override bool ValidData()
        {
            if ((string.IsNullOrEmpty(MenuCode)))
            {
                ShowMessageBox("Bạn chưa nhập mã thực đơn !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtMenuCode.Focus();
                return false;
            }
            if ((string.IsNullOrEmpty(MenuName)))
            {
                ShowMessageBox("Bạn chưa nhập tên thực đơn !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtMenuName.Focus();
                return false;
            }
            if ((string.IsNullOrEmpty(UnitID)))
            {
                ShowMessageBox("Bạn chưa nhập đơn vị thực đơn !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cboUnitID.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(MenuCategoryID))
            {
                ShowMessageBox("Bạn chưa nhập mã loại thực đơn !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cboMenuCategoryID.Focus();
                return false;
            }
            return true;
        }

        protected override bool SaveData()
        {
            try
            {
                if (eActionMode == ActionMode.AddNew)
                {
                    _restaurantMenuPresenter.Save();
                    ShowMessageBox("Thêm mới dữ liệu thành công !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    _restaurantMenuPresenter.Save();
                    ShowMessageBox("Sửa dữ liệu thành công !", "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (ApplicationException ex)
            {
                ShowMessageBox(ex.Message, "Thông báo thay đổi dữ liệu !", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            return true;
        }

        protected override void LoadFormDetail()
        {
            base.LoadFormDetail();

            this.ActiveControl = txtMenuCode;
        }

        public frmRestaurantMenuDetail()
        {
            InitializeComponent();

            _unitsPresenter = new UnitsPresenter(this);
            _restaurantMenuCategoriesPresenter = new RestaurantMenuCategoriesPresenter(this);
            _restaurantMenuPresenter = new RestaurantMenuPresenter(this);
        }

        private void cboUnitID_ValueChanged(object sender, EventArgs e)
        {
            if (cboUnitID.IsItemInList())
            {
                lblSalesPrice.Text = "/ " + cboUnitID.Text;
            }
        }

        private void chkIsNorm_CheckedChanged(object sender, EventArgs e)
        {
        }

        private void btnBrowserImage_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();

            openFile.Title = "Chọn ảnh làm đại diện";

            if (openFile.ShowDialog() == DialogResult.OK)
            {
                ptMenuImage.Image = System.Drawing.Image.FromFile(openFile.FileName);
                imgPath = openFile.FileName;
            }
            else { imgPath = null; };
        }
    }
}
